Bài 06 - Callback
Mục tiêu bài học
- Hiểu được callback function là gì và vì sao cần sử dụng
- Phân biệt callback với các hàm thông thường
- Biết cách truyền hàm làm tham số
- Áp dụng callback để viết mã linh hoạt và dễ mở rộng
- Làm quen với các hàm có sẵn trong JavaScript sử dụng callback (
setTimeout
,map
,filter
, v.v.)
Nội dung chính
1. Callback là gì?
Callback là hàm được truyền làm đối số cho một hàm khác và được gọi lại ("callback") bên trong hàm đó.
➡ Callback thường dùng để:
- Trì hoãn xử lý (đợi 1 hành động xảy ra)
- Tái sử dụng logic
- Làm việc với bất đồng bộ (asynchronous)
2. Ví dụ cơ bản
function greet(name, callback) {
console.log("Xin chào " + name);
callback(); // Gọi lại hàm callback
}
function done() {
console.log("Gọi xong rồi nè!");
}
greet("Phú", done);
3. Hàm truyền callback tự định nghĩa
function tinhToan(a, b, hamXuLy) {
return hamXuLy(a, b);
}
function cong(x, y) {
return x + y;
}
function nhan(x, y) {
return x * y;
}
console.log(tinhToan(3, 4, cong)); // 7
console.log(tinhToan(3, 4, nhan)); // 12
4. Callback với hàm built-in
let arr = [1, 2, 3, 4, 5];
// Dùng callback với map
let squared = arr.map(function(num) {
return num * num;
});
console.log(squared); // [1, 4, 9, 16, 25]
5. Callback bất đồng bộ – setTimeout
console.log("Bắt đầu");
setTimeout(() => {
console.log("Đợi 2 giây rồi mới in");
}, 2000);
console.log("Kết thúc");
6. Viết callback bằng arrow function
function saySomething(message, callback) {
console.log(message);
callback();
}
saySomething("Xin chào!", () => {
console.log("Tôi là callback đây 😎");
});
Bài tập
Bài 1 – Viết hàm sử dụng callback
Tạo hàm helloUser(name, callback)
để in ra lời chào và sau đó gọi callback để thông báo “Chào xong rồi!”.
Bài 2 – Tính toán linh hoạt
Tạo hàm calculate(a, b, operation)
và truyền vào các hàm như add
, subtract
, multiply
.
Bài 3 – Tìm số chẵn trong mảng
Viết hàm locSoChan(arr, callback)
nhận một mảng và callback xử lý từng phần tử. Callback chỉ in các số chẵn.
Bài 4 – Sử dụng setTimeout
Viết chương trình in ra “Bắt đầu”, sau 1 giây in ra “Đang xử lý…”, sau đó 2 giây sau nữa thì in ra “Hoàn tất”.
Bài 5 – Mô phỏng gọi API
Viết hàm fetchData(callback)
mô phỏng việc gọi API bằng setTimeout
. Sau 2 giây, callback sẽ được gọi để hiển thị dữ liệu giả định {name: "Alice", age: 20}
.